package com.company;

public class ReflectDemo01 {

    public static void main(String[] args) {
// write your code here
        try {

            /*
             * 获取Class 对象的方式：
             *   1. Class.forName("全类名");  // 将字节码文件加载进内存，返回Class 对象
             * */
            Class cls1 = Class.forName("com.company.Person");
            System.out.println("cls1 : " + cls1);
            //cls1 : class com.company.Person


            /*
             * 获取Class 对象的方式：
             *   2. 类名.class;
             * */
            Class cls2 = Person.class;
            System.out.println("cls2 : " + cls2);
            //cls2 : class com.company.Person


            /*
             * 获取Class 对象的方式：
             *   3. 对象.getClass();
             * */
            Person p1 = new Person("zhangsan", 10);
            Class cls3 = p1.getClass();

            System.out.println("cls3 : " + cls3);
            //cls3 : class com.company.Person

            System.out.println(cls1 == cls2);  // true
            System.out.println(cls1 == cls3);  // true
            System.out.println(cls3 == cls2);  // true

/**
 *结论：
 *  同一个字节码文件(*.class)在一次程序运行过程中，只会被加载一次，不论通过哪一种方式获取的 Class 对象都是同一个
 */
        }catch (ClassNotFoundException e){
            System.out.println(e.getMessage());
        }
    }
}